Minjeong / 4월 5주차 / 4문제 #205
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🌱WIL
매개변수 탐색에 대해 알게 되었다. 기존 이진 탐색은 정렬된 값 중에서 특정 원소를 찾는 방식이었다. 하지만 이 문제는 정답이 될 수 있는 "범위 내 값"을 이진 탐색으로 좁혀가야 했다. 처음에는 이게 너무 헷갈렸는데 이런 문제를 풀어볼 수 있어서 정말 다행이라는 생각이 들었다. 관련 문제를 많이 풀어서 내걸로 만들어야겠다.단지번호붙이기문제에서는 "플러드 필"이라는 개념을 새로 알게 되었다.미로 탐색문제도 풀면서 오랜만에 그래프 문제인 BFS 문제를 풀게 되었다. DFS로 접근해야 할 지, BFS로 접근해야 할 지 헷갈리는 게 좀 있었지만 문제들을 풀면서 다시 리마인드 하게 되었다.🚀주간 목표 문제 수: 4개
백준 #2110. 공유기 설치: 이분탐색 / 골드4
정리한 링크: (바로가기)
🚩플로우 (선택)
dist를 이진 탐색한다.left = 1,right = 가장 먼 집 간 거리mid값을 기준 거리로 공유기를 설치할 수 있는지를 판별한다.mid)를 출력한다.🚩제출한 코드
💡TIL
기존 이진 탐색은 정렬된 값 중에서
특정 원소를 찾는 방식이었다.하지만 이 문제는 **정답이 될 수 있는 "범위 내 값"**을 이진 탐색으로 좁혀가야 했다.
처음에는 이게 왜 이진 탐색인지 헷갈렸지만,
"조건을 만족하는 값이 있는지 여부"를 탐색하는 과정이 매개변수 탐색이라는 것을 이해하고 나서 개념이 정리되었다.
이진 탐색 = 정답을 직접 찾는 것이 아니라, 가능한지를 판단하며 답을 좁히는 과정임을 확실히 이해할 수 있었다.
백준 #1654. 랜선 자르기: 이분탐색 / 실버2
정리한 링크: (바로가기)
🚩플로우 (선택)
K,N: 현재 가진 랜선의 수K, 필요한 랜선의 수N을 입력받는다.arr:K개의 랜선 길이를 리스트로 저장한다.start = 1: 만들 수 있는 최소 길이 (0은 나눌 수 없으므로 1부터 시작)end = max(arr): 만들 수 있는 최대 길이 (가장 긴 랜선)start가end이하일 때까지 반복한다.mid)mid = (start + end) // 2: 현재 시도할 랜선의 길이로 설정cnt = sum(x // mid for x in arr): 각 랜선을mid길이로 잘라서 만들 수 있는 랜선 총합을 구한다.cnt >= N이면: 현재 길이로도N개 이상 만들 수 있음 → 더 긴 길이도 가능할 수 있음 →start = mid + 1cnt < N이면: 랜선이 부족함 → 더 짧은 길이 시도 →end = mid - 1end는 조건을 만족하는 최대 길이이므로 결과로 출력한다.🚩제출한 코드
💡TIL
백준 #2178. 미로 탐색: 그래프 / 실버1
정리한 링크: (바로가기)
🚩플로우 (선택)
N,M: 미로의 세로, 가로 크기를 입력받는다.graph: 각 행마다 정수 리스트로 변환된 미로 정보를 2차원 리스트로 저장한다.bfs(x, y)함수는 시작 좌표(0, 0)에서 출발하여 목적지(N-1, M-1)까지 최소 칸 수를 구하는 함수이다.dx,dy배열을 정의한다.(x, y)를 큐에 삽입하고 BFS 탐색을 시작한다.(x, y)를 꺼내고, 4방향에 대해 이동 가능한 위치인지 체크한다.graph[nx][ny]값을graph[x][y] + 1로 갱신 (거리 누적)graph[N-1][M-1]에 저장된 값이 최소 칸 수이므로 이를 반환한다.print(bfs(0, 0))을 통해 결과 출력🚩제출한 코드
💡TIL
백준 #2667. 단지번호 붙이기: 그래프 / 실버1
정리한 링크: (바로가기)
🚩플로우 (선택)
n을 입력받고,n x n크기의 2차원 리스트graph를 생성한다.dx,dy리스트를 정의한다.(x, y)좌표를 시작으로 BFS를 수행한다.0으로 바꿔 재방문을 방지한다.(i, j)를 순회하며graph[i][j] == 1인 경우 BFS를 호출한다.result리스트에 저장한다.result리스트를 오름차순으로 정렬한다.len(result))와 각 단지에 속한 집의 수를 한 줄씩 출력한다.🚩제출한 코드